package com.ego.product.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.ego.common.vo.PageVo;
import com.ego.product.po.Attr;
import com.ego.product.vo.AttrGroupRelationVo;
import com.ego.common.vo.product.AttrRespVo;
import com.ego.product.vo.AttrSearchVo;
import com.ego.common.vo.product.AttrVo;

import java.util.List;

/**
 * @author KamTang
 * @program: ego
 * @description 商品属性服务层
 * @date 2022-11-13 12:56:14
 */
public interface AttrService extends IService<Attr> {
    /**
     * 级联增加商品属性
     *
     * @param attr 属性
     */
    void saveCascade(AttrVo attr);

    /**
     * 搜索商品属性
     *
     * @param search 属性搜索VO
     * @return 分页结果集
     */
    PageVo<AttrRespVo> search(AttrSearchVo search);

    /**
     * 获取属性详细信息
     *
     * @param attrId 属性ID
     * @return AttrRespVo
     * @see AttrRespVo
     */
    AttrRespVo get(Long attrId);

    /**
     * 更新
     *
     * @param attrVo 属性
     */
    void update(AttrVo attrVo);

    /**
     * 根据分组ID获取属性关系
     *
     * @param attrGroupIds 分组ID
     * @return 属性
     * @see Attr
     */
    List<Attr> getAttrRelation(List<Long> attrGroupIds);

    /**
     * 获取没有关联的属性分组
     *
     * @param vo 属性分组关系VO
     * @return 属性
     * @see Attr
     */
    PageVo<Attr> getNoRelationAttr(AttrGroupRelationVo vo);

    /**
     * 根据分组id查找关联的所有基本属性
     *
     * @param attrGroupIds 分组ID
     * @return @see
     * @see Attr
     */
    List<Attr> getByGroupIds(List<Long> attrGroupIds);

    /**
     * 在指定的所有属性集合中，获取可检索的attrId
     * @param attrIds attrId
     * @return 可检索的attrId
     */
    List<Long> getRetrievableId(List<Long> attrIds);
}

